
app.controller('RoleController', function($cookieStore, InfoRoleService ,InfoRoleAuthService ,InfoAuthService ,UiUtilService ,$compile ,$scope, $http, $state, $window, MODE,URL) {
		var zTree;
		var vm = $scope.vm = {
			infoRole:{},
			editInfoRole:{},
			searchArgs:{},
			initOptions:[], //列表中空div的id
			initEvent:[], //绑定到列表中空div的事件操作
			ztreeNode:'',
			selectedRole:{}
		}

		/**
		 * bootstrap table初始化
		 */
		$scope.init = function (searchArgs) {
			//---先销毁表格 ---
			$("#roleTable").bootstrapTable('destroy');
			//---初始化表格,动态从服务器加载数据---
			$("#roleTable").bootstrapTable({
				url:URL.BASEURL + URL.ROLEURL + "getList",
				method:'GET',
				cache:false,
				striped: true, //是否显示行间隔色
				pagination: true, //是否显示分页
				pageSize: 10, //每页的记录行数
				pageNumber: 1, //初始化加载第一页，默认第一页
				queryParams:function queryParams(params){
					//分页参数
					var param = {
						limit: params.pageSize,
						page: params.pageNumber
					};
					for(var key in searchArgs){
						param[key]=searchArgs[key]
					}
					return param;
				},
				queryParamsType:'',
				sidePagination:'server',
				responseHandler : function (res) {
					/*
					 * 加载服务器数据之前的处理程序，可以用来格式化数据。
					 * 参数：res为从服务器请求到的数据。
					 * 这里将服务器返回的数据重新做了组装。
					 */
					var result = {};
					result.rows = res.data.items;
					result.total = res.data.totalCount;
					vm.initOptions = [];//清空数组
					vm.initEvent = [];//清空数组
					vm.searchArgs = {};//清空搜索对象
					return result;
				},
				onLoadError:function (err) {
					if(err == 1001){
						Lobibox.alert("error",{
							msg:'您尚未开通该权限！'
						});
						return;
					}else if(err == 1101){
						location.href = "./"; //跳转到登录页
					}
				},
				columns: [{
					field:'',
					title:'#',
					radio:true
				},{
					field: 'id',
					title: 'ID',
					align:'center'
				},{
					field: 'roleName',
					title: '角色名',
					align:'center'
				},{
					field: 'codeName',
					title: '角色编号',
					align:'center'
				},{
					field: 'remark',
					title: '描述',
					align:'center'
				},{
					field: 'createTime',
					title: '创建时间',
					formatter:$scope.dateFormat,
					align:'center'
				},{
					field: 'updateTime',
					title: '更新时间',
					formatter:$scope.dateFormat,
					align:'center'
				},{
					field:'',
					title:'操作',
					formatter:$scope.operateFormatter,
					align:'center'
				}
				],
				onLoadSuccess: function(){
					//加载成功时执行
					//table加载完成之后
					$scope.bindOperate();
				},
				onCheck:function (row,element) {
					vm.selectedRole.id = row.id;
				}
			});
		}

		/**
		 * 行为操作
		 * @param value 字段值
		 * @param row  行元素
		 * @param index 行下标
		 */
		$scope.operateFormatter = function (value,row,index) {
			//界面预留一个没有任何class的div
			var str = "<div id = 'row" + row.id +"'></div>";
			//div的id列表
			vm.initOptions.push("row" + row.id);
			//动态的html存在事件
			vm.initEvent.push("<a href='' ng-click = 'edit(" + row.id + ")'>" + "编辑" + "&nbsp&nbsp&nbsp&nbsp"
				+ "</a>" + "<a href='' ng-click = 'delete(" + row.id + ")'>" + "删除" + "</a>");
			return str

		};

		/**
		 * 日期格式化 yyyy-MM-dd HH:mm:ss
		 * @param value
		 * @param row
		 * @param index
		 */
		$scope.dateFormat = function (value,row,index) {
			return UiUtilService.dateFormatter(value);
		}

		/**
		 * 绑定列表操作并编译 使ng-click生效
		 */
		$scope.bindOperate = function (){
			for(var i = 0; i < vm.initOptions.length;i++) {
				var option = vm.initOptions[i];
				var event = vm.initEvent[i];
				//将动态的html添加到记录好的空div中
				var $el = $(event).appendTo("#"+option);
				//利用$compile编译这段代码 使ng-click生效
				$compile($el)($scope);
			}
		};

		/**
		 * 列表查询
		 */
		$scope.queryList = function () {
			if(vm.infoRole.roleName){
				vm.searchArgs.name = vm.infoRole.roleNamealert;
			}
			$scope.init(vm.searchArgs);
		};

		$scope.queryList();


		/**
		 * 添加角色之前初始化
		 */
		$scope.intiAddRole = function () {
			vm.editInfoRole = {};
		}

		/**
		 * 添加保存
		 */
		$scope.add = function(){
			InfoRoleService.addRole(vm.editInfoRole).then(function(data){
				if(data.code == "1"){
					$('#addRoleModal').modal('hide');
					$scope.queryList();
				};
			});
		};

		/**
		 * 编辑
		 */
		$scope.edit = function(id){
			InfoRoleService.get(id).then(function (data) {
				if(data.code == '1'){
					vm.editInfoRole = $.extend(true,{},data.data);
					$('#addRoleModal').modal('show');
				}
			});
		};

		/**
		 * 删除
		 */
		$scope.delete = function (id) {
			Lobibox.confirm({
				msg: "确定删除该数据吗？",
				callback: function ($this, type) {
					if (type === 'yes') {
						InfoRoleService.delete(id).then(function (data) {
							if(data.code == '1'){
								Lobibox.alert('success', {
									msg: "删除成功",
									callback: function ($this,type) {
										if(type == 'ok'){
											$scope.queryList();
										}
									}
								});

							}
						});
					}
				}
			});

		};

		/**
		 * 监听事件
		 */
		$scope.$on("user.queryList",function (event,data) {
			$scope.queryList();
		});

	/**
	 * ztree 设置
	 */
	/************* zTree设置  *****************/
	var setting = {
		check: {
			enable: true,
			chkboxType: { "Y" : "ps", "N" : "ps" }
		},
		data: {
			simpleData: {
				enable: true,
				idKey: "id",
				pIdKey: 'parentId'
			}
		},
		view: {
			showLine: false,
			showIcon: false
		}
	};

	$scope.initAddAuthForRole = function () {

		if(!vm.selectedRole.id){
			Lobibox.alert("error",{
				msg:"请选择要授权资源的角色！",
				callback:function () {
					$('#addAuthForRoleModal').modal('hide');
				}
			});
			return;
		}
		/* 重新加载树，防止再次授权是出现历史记录 */
		$scope.initTree(vm.selectedRole.id);
	};

	/**
	 * 获取资源树图数据
	 */
	$scope.initTree = function(roleId) {
		InfoAuthService.findRoleAuthByRoleId(roleId).then(function (data) {
			var data = data.data;
			for(var i = 0; i < data.length; i++) {
				// 默认展开顶级节点
				if(data[i].pId == 0) {
					data[i].open = true;
				}
				//
				if(data[i].checked == "true"){
					data[i].checked = true;
					data[i].open = true;
				}
				data[i].name = data[i].authName;
			}
			vm.treeData = data;
			$.fn.zTree.init($("#authForRoleTree"), setting, data);
			zTree = $.fn.zTree.getZTreeObj("authForRoleTree");
			zTree.expandAll(true);


		});
	};

	// $scope.initTree(1);

	/**
	 * 保存 角色-资源的对应关系
	 */
	$scope.addAuthForRole = function () {
		if(!vm.selectedRole.id){
            layer.alert("请选择授权资源的角色",{icon:7});
		}
		if(zTree) {
			var nodes = zTree.getCheckedNodes(true);
			var selectNodes = zTree.getSelectedNodes();
			// 组装需要保存的数据
			var roleAuths = [];
			var authIds = [];
			for(var i = 0 ; i < nodes.length; i++) {
				// roleAuths[i] = {};
				// roleAuths[i].roleId = vm.selectedRole.id;   // roleId
				// roleAuths[i].authId = nodes[i].id;      // resourceId
                authIds[i] = nodes[i].id;
			}
			console.log(authIds);

			// 保存
			// var data = {};
			// data.roleAuths = roleAuths;
			// data.roleId = vm.selectedRole.id;
			var param  = {
				"roleId": vm.selectedRole.id,
				"authIds":authIds
			};
			InfoRoleAuthService.addRoleAuth(param).then(function (data) {
				if(data.code == 1){
					Lobibox.alert("success",{
						msg:"您选择的角色授权保存成功！"
					});
					$('#addAuthForRoleModal').modal('hide');
				}

			});
		}
	}




});
